home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / d.t.p / utils / propage / donsgenies / donsgenies.lha / Don'sGenies / ImportFrames.pprx < prev    next >
Text File  |  1993-05-25  |  5KB  |  146 lines

  1. /* Program to load a numbered series of pictures (usually animation frames) onto an existing page. New pages are also created as in AutoImport. The box contents are hidden because showing a large number of bitmaps can exhaust chip memory; also, hiding the images greatly speeds up loading. 
  2. Written by Don Cox, 1993. Not Public Domain. All rights reserved. */
  3.  
  4. trace n
  5.  
  6.  
  7. call SafeEndEdit.rexx()
  8. call ppm_AutoUpdate(0)
  9. oldunits = ppm_GetUnits()
  10. call ppm_SetUnits(2)
  11. oldpoints = ppm_GetSize()
  12. call ppm_SetSize(12)
  13.  
  14. address command
  15.  
  16. currentpage = ppm_CurrentPage()
  17. if currentpage = 0 then currentpage = ppm_CreatePage(1,1,1,0,0)
  18. psize = ppm_GetPageSize(currentpage)
  19. pwidth = word(psize,1)
  20. if pwidth<5 then exit_msg("Page too small")
  21. pheight = word(psize,2)
  22.  
  23. filename = ppm_GetFileName("Select First File of Sequence:", "PPage:", "")
  24. if filename = '' then exit_msg("No File Selected")
  25.  
  26. form = "Frames per Row (1-20):4"||"0a"x "Frame Interval:1"||"0a"x "Outline Width (mm):1"
  27. form = ppm_GetForm("Set Layout",5,form)
  28. if form = "" then exit_msg("User Aborted Import")
  29. parse var form rownumber "0a"x interval "0a"x linewidth
  30.  
  31. if rownumber<1 | rownumber>20 then exit_msg("Invalid Row number: "rownumber)
  32. if interval<1 then Exit_msg("Invalid Interval: "interval)
  33.  
  34. colgap = 0.5
  35. rowgap = 1.5
  36. pagemargin = 1.5
  37. pagemargin2 = pagemargin * 2
  38.  
  39. collist = ppm_GetColorList()
  40. collist = substr(collist, pos('0a'x, collist) +1) /* strip off initial line which is number of colours */
  41. firstcolour =  left(collist, pos('0a'x, collist)-1 )
  42. linecolor = firstcolour
  43.  
  44. if datatype(linewidth, 'N') =1 then do
  45.     if linewidth =0 then break 
  46.     linewidth = linewidth/10 /* convert to cm */
  47.     linecolor=ppm_SelectFromList("Select Outline Color",24,18,0,collist)
  48.     if linecolor = "" then linecolor = firstcolour
  49.     end
  50. else do
  51.     linecolor = firstcolour
  52.     linewidth = 0
  53.     end
  54.  
  55. pwidth2 = pwidth- pagemargin2 -((rownumber-1)*colgap) /* 3 is margins */
  56. framewidth = pwidth2/rownumber
  57. frameheight = (framewidth*512)/640
  58. frameheight2 = frameheight+ rowgap
  59. colnumber = (pheight-pagemargin2)%frameheight2
  60. if colnumber = 0 then exit_msg("Page too Small")
  61.  
  62. /* strip off number from end of filename */
  63. do i = 1 to length(filename)
  64.     endofname = right(filename,i)
  65.     if verify(endofname,"0123456789") ~=0 then break
  66.     end
  67. numberlength = length(endofname)-1
  68.  
  69. if numberlength = 0 then exit_msg("Not a numbered file")
  70.     
  71. filenumber = substr(endofname,2)
  72. filebase = left(filename,length(filename)-numberlength)
  73.  
  74. /* Create some boxes */
  75. thispage = currentpage
  76. do limit = 1 to 20   /* safety limit of 20 pages  */
  77.     do i = 1 to colnumber
  78.         do j = 1 to rownumber
  79.             k = j-1
  80.             k2= k * colgap
  81.             m = i-1
  82.             m2 = m * rowgap
  83.  
  84.             currentnumber = right(filenumber,numberlength,"0")
  85.             fullname = filebase||currentnumber
  86.             if ~exists(fullname) then Exit_msg("Done")
  87.  
  88.             boxes.i.j.pic = ppm_CreateBox(pagemargin +(framewidth*k)+k2, pagemargin + (frameheight*m)+ m2, framewidth, frameheight, 0)
  89.             box = boxes.i.j.pic
  90.             call ppm_SetBoxHide(box,1) /* To avoid using up chip RAM */
  91.            
  92.             worked = ppm_ImportBM(box, fullname)
  93.             if worked = 0 then Exit_msg("Done")
  94.             
  95.             size = ppm_GetBoxSize(box)
  96.             boxwidth = word(size,1)
  97.             boxheight = word(size,2)
  98.             boxwidth = boxwidth-(linewidth*2)
  99.             boxheight = boxheight-(linewidth*2)
  100.  
  101.             info = ppm_GetBoxInfo(box)
  102.             width = word(info,2) /* width & height of bitmap */
  103.             height = word(info,3)
  104.  
  105.             width = width/(75/2.54) /* screen images at 75dpi for high res */
  106.             xscale = boxwidth/width
  107.             height = height/(75/2.54)
  108.             yscale = boxheight/height
  109.  
  110.             call ppm_SetBoxScale(box,xscale,yscale)
  111.             call ppm_SetBoxOffset(box,0,0)
  112.             call ppm_SetBoxFrame(box,1)
  113.             call ppm_SetBoxFrameData(box, linecolor, linecolor, linewidth*30, 1, 0)
  114.             call ppm_SetBoxMargins(box, linewidth, linewidth, linewidth, linewidth)
  115.             
  116.             boxes.i.j.caption = ppm_CreateBox(pagemargin +(framewidth*k)+k2, pagemargin + (frameheight*i)+ m2+ 0.2, framewidth, 1, 0)
  117.             captiontext = "Frame "||currentnumber
  118.             overflow = ppm_TextIntoBox(boxes.i.j.caption,captiontext)
  119.             call ppm_ShowStatus(captiontext)
  120.             
  121.             filenumber = filenumber+interval
  122.             end /* of row */
  123.     end /* of column */
  124. /* Create a new page without adding a blank page at end of document */
  125. trace n
  126.     newpage = ppm_CreatePage(thispage,1,1,0,0)
  127.     newpage = ppm_MovePage(newpage+1,newpage)
  128.     thispage = ppm_GoToPage(newpage+1)
  129. trace n
  130.  
  131. end /* 1 to 20 */
  132.  
  133.  
  134.  
  135. exit_msg: 
  136. do
  137.     parse arg message
  138.     if message ~= '' then call ppm_Inform(1, message,)
  139.     call ppm_AutoUpdate(1)
  140.     call ppm_SetUnits(oldunits)
  141.     call ppm_SetSize(oldpoints)
  142.     call ppm_ClearStatus()
  143.     exit
  144. end
  145.  
  146.